using System;
using Cysharp.Threading.Tasks;

namespace EventBus
{
    public partial class Sender : ISender
    {
        private T Cast<T>(object callback) where T : Delegate
        {
            var castCallback = callback as T;
            if (castCallback != null)
                return castCallback;

            var methodName = "";
            if (callback is Action)
            {
                var callbackAction = (Action)callback;
                methodName = callbackAction.Method.Name;
            }

            var message =
                $@"强制转换回调函数出错。
事件发送方信息：{typeof(T).UnderlyingSystemType}, 
事件监听方信息:{callback.GetType().UnderlyingSystemType}, 监听函数:{methodName}
可能的原因：
1. 发送方和监听方的参数数量不匹配
2. 发送方和监听方的参数类型不匹配
3. 发送方需要返回值，监听方没有返回值
4. 发送方不需要返回值，监听方有返回值
5. 发送方和接收方的返回值类型不匹配";
            throw new InvalidCastException(message);
        }

        
    }
}